package com.yidu.service.impl;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.yidu.common.Tools;
import com.yidu.dao.ListenBackstageUserMapper;
import com.yidu.dao.ListenCompanyMapper;
import com.yidu.dao.ListenFinanceMapper;
import com.yidu.dao.ListenUserRoleMapper;
import com.yidu.domain.ListenBackstageUser;
import com.yidu.domain.ListenCompany;
import com.yidu.domain.ListenFinance;
import com.yidu.domain.ListenUserRole;
import com.yidu.service.ListenCompanyService;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 段亚龙
 * @since 2018-11-27
 */
@Service
public class ListenCompanyServiceImpl implements ListenCompanyService {
	@Resource
	ListenCompanyMapper dao;
	@Resource
	ListenBackstageUserMapper userDao;
	@Resource
	ListenUserRoleMapper roleDao;
	@Resource
	ListenFinanceMapper financeDao;
	/**
	 *  公司查询所有的方法
	 * @author zwm
	 */
	@Override
	public List<ListenCompany> querAllzwm() {
		return dao.querAllzwm();
	}
	/**
	 * 公司增加的方法
	 * @author 段亚龙
	 */
	@Override
	public int add(ListenCompany listenCompany) {
		System.out.println("转过来的id"+listenCompany.getCompanyId());
		//判断id是否为空如果为空则不成功，如果不为空则成功
		if(listenCompany.getCompanyId()==null || "".equals(listenCompany.getCompanyId())) {
			//转换时间类型
			String uuid = UUID.randomUUID().toString().replaceAll("-", "");
			listenCompany.setCompanyId(uuid);
			//增加方法
			return dao.insertSelective(listenCompany);
		}else {
			//修改
			return dao.updateByPrimaryKeySelective(listenCompany);
		}
	}
	/**
	 *模糊查询的方法
	 *@author dyl
	 */
	@Override
	public ListenCompany findById(String companyId) {
		return dao.selectByPrimaryKey(companyId);
	}
	/**
	 * 查询行页数的方法
	 * @author dyl
	 */
	@Override
	public int findRows() {
		
		return dao.findRows();
	}

	
	/**
	 * 删除公司的方法
	 * @author dyl
	 */
	@Override
	public int delete(String companyId) {
		
		return dao.deleteByPrimaryKey(companyId);
	}
	/**
	 * 分页查询的方法
	 * @author dyl
	 */
	@Override
	public PageInfo<ListenCompany> findAll(Integer page, Integer pageSize, ListenCompany us) throws ParseException{
		PageHelper.startPage(page,pageSize);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		//查询的方法
		List<ListenCompany> types = dao.findAll(us);
		//转换时间类型
		for (ListenCompany company : types) {
			company.setOpenTimeVo(sdf.format(company.getOpenTime()));
			System.err.println("转换后的时间String"+company.getOpenTimeVo());
		}
		//分页的方法
		PageInfo<ListenCompany> typesPageInfo = new PageInfo<>(types);
		//返回
		return typesPageInfo;
	}
	/**
	 * 查询所有的方法
	 * @author dyl
	 */
	@Override
	public List<ListenCompany> findAll() {
		// TODO Auto-generated method stub
		return null;
	}
	/**
	 * 增加分公司加盟
	 * @param company 公司对象
	 * @author 刘武
	 * @return int
	 */
	@Override
	public int addLeague(ListenCompany company) {
		int rows=0;
		/**
		 * 添加分公司
		 */
		//主键
		company.setCompanyId(Tools.getRandomString(32));
		company.setCompanyType(1);//公司类型为分公司
		company.setIsva(0);//待审核 默认为0
		company.setOpenTime(new Date());//操作时间
		//添加公司的dao方法
		dao.insertSelective(company);
		/**
		 * 添加用户
		 */
		//新建一个用户对象
		ListenBackstageUser users=new ListenBackstageUser();
		//赋值用户站点
		users.setSite(company.getCompanyId());
		//赋值用户id
		users.setBuId(Tools.getRandomString(32));
		//用户名
		users.setBuName(company.getBuName());
		//用户密码
		users.setBuPwd(company.getBuPwd());
		//用户联系手机
		users.setBuPhone(company.getBuPhone());
		//用户备注
		users.setBuRemarks("分公司");
		//设置无效
		users.setIsva(2);
		//操作时间
		users.setOpenTime(new Date());
		//添加用户的dao方法
		rows=userDao.insertSelective(users);
		//返回rows
		return rows;
	}
	/**
	 * 显示加盟分公司审核
	 * @param  map map对象
	 * @author 刘武
	 * @return 公司集合
	 */
	@Override
	public List<ListenCompany> findLeague(HashMap<String, Object> map) {
		return dao.findLeague(map);
	}
	/**
	 * 显示加盟分公司审核行数
	 * @param map map对象
	 * @author 刘武
	 * @return int类型 行数
	 */
	@Override
	public int findLeagueRows(HashMap<String, Object> map) {
		return dao.findLeagueRows(map);
	}
	/**
	 * 修改公司状态
	 * @param company 公司对象
	 * @author 刘武
	 * @return int 修改的行数
	 */
	@Override
	public int updateState(ListenCompany company) {
		int rows=0;
		//判断公司是否有效
		if(company.getIsva()!=1) {
			//修改公司状态
			rows=dao.updateState(company);
			return rows;
		}else {
			//修改公司状态
			dao.updateState(company);
			//通过公司id查询出无效的用户id集合
			List<ListenCompany> list=dao.findBuId(company.getCompanyId());
			//遍历通过公司id查询出无效的用户id集合
			for (ListenCompany listenCompany : list) {
				//新建一个用户对象类
				ListenBackstageUser user=new ListenBackstageUser();
				//用户对象主键
				user.setBuId(listenCompany.getBuId());
				//设置用户是否有效
				user.setIsva(company.getIsva());
				//判断操作人
				if(!Tools.isEmpty(company.getOper())) {
					user.setOper(company.getOper());
				}
				//修改用户是否有效
				userDao.updateState(user);
			}
			
			//通过公司id查询出用户id集合
			List<ListenCompany> lists=dao.findLeagueByComId(company.getCompanyId());
			//如果查出来的集合为空
			if(lists.isEmpty()) {
				//返回0
				return 0;
			}else {
				//遍历通过公司id查询出用户id集合
				for (ListenCompany listenCompany : lists) {
					//新建一个用户角色模具类
					ListenUserRole role=new ListenUserRole();
					//用户id
					role.setBuId(listenCompany.getBuId());
					//用户角色id
					role.setUrId(Tools.getRandomString(32));
					//角色id默认赋值为2
					role.setRoleId("2");
					//增加到用户角色表中
					roleDao.insertSelective(role);
					/**
					 * 新增公司财务
					 */
					//新建一个财务类
					ListenFinance finance=new ListenFinance();
					//赋值财务id 主键
					finance.setFinanceId(Tools.getRandomString(32));
					//设置为有效
					finance.setIsva(1);
					//操作时间
					finance.setOpenTime(new Date());
					//判断操作人是否为空
					if(!Tools.isEmpty(company.getOper())) {
						finance.setOper(company.getOper());
					}
					//公司id
					finance.setCompanyId(listenCompany.getCompanyId());
					//设置公司财务
					finance.setCompanyPrice(BigDecimal.valueOf(500000.00));
					//调用增加财务的方法
					rows=financeDao.insertSelective(finance);
				}
				return rows;
			}
		}
		
	}
	/**
	 * 查询公司和关联的用户信息
	 * @param company 公司对象
	 * @author 刘武
	 * @return 公司集合
	 */
	@Override
	public List<ListenCompany> selectCompany(ListenCompany company) {
		return dao.selectCompany(company);
	}
	/**
	 * 修改公司和关联的用户
	 * @param company 公司对象
	 * @author 刘武
	 * @return int
	 */
	@Override
	public int updateCompanyOrUser(ListenCompany company) {
		int rows=0;
		//修改公司
		company.setIsva(0);//修改为无效 isva=0
		//调用修改公司对象的方法
		dao.updateByPrimaryKeySelective(company);
		//新建一个用户对象
		ListenBackstageUser user=new ListenBackstageUser();
		//用户主键
		user.setBuId(company.getBuId());
		//用户名
		user.setBuName(company.getBuName());
		//用户手机号
		user.setBuPhone(company.getBuPhone());
		//用户密码
		user.setBuPwd(company.getBuPwd());
		//判断操作人是否为空
		if(!Tools.isEmpty(company.getOper())) {
			user.setOper(company.getOper());
		}
		//调用修改用户对象的方法
		rows=userDao.updateByPrimaryKeySelective(user);
		return rows;
	}
	/**
	 * 查看公司名是否存在
	 * @param companyName 公司名
	 * @author 刘武
	 * @return 公司对象
	 */
	@Override
	public ListenCompany findByCompanyName(String companyName) {
		return dao.findByCompanyName(companyName);
	}

}
